<?php
/**
 * Controller (Steuerung):
 * Absicherung von externen Variablen (vom Benutzer uebergebene Variable) {POST|SEND|COOKIES|...}
 * Zur Verfuegungstellung von benoetigten Datenstrukturen, Klassen, Variablen, ...
 * Gibt die Daten an "View" weiter
 *
 * @TODO, @NOTICE: Veraltete Klasse, bitte nicht mehr verwenden !!!
 *
 *
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2013 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 *
 * */


Class Yapary_MVC_Controller Implements Yapary_MVC_IController
{
    /** @var Speicherung des Models und des Views */
	protected $oModel    = NULL;
	protected $oView     = NULL;

	/** @var object $oMVCGum	: Klasse zur Verbindung eines MVC-Konstrukts */
	private   $oMVCGum   = NULL;
	/** @var Zentraler Dump fuer Model View und Controller */
	private   $oExchange = NULL;

	/** @var Referenz auf das in MVCHandler stehende Array arrException */
	private   $arrException;
    /** @object $oMVCConfig		: MVC-Konfigurationsklasse */
    private $oMVCConfig     = NULL;


	function __construct (Yapary_MVC_Model &$_cModel, Yapary_MVC_View &$_cView, Yapary_MVC_Exchange &$_cExchange, Yapary_MVC_MVCGum &$_cMVCGum, Yapary_MVC_MVCConfig &$_cMVCConfig)
	{
	    Yapary_TraceRoute::add();

	    $this->arrAction = array();

		if (is_object($_cModel)) {
			$this->oModel = $_cModel;
		}
		if (is_object($_cView)) {
			$this->oView = $_cView;
		}

		$this->oExchange = $_cExchange;
		$this->oMVCGum   = $_cMVCGum;
		$this->oMVCConfig= $_cMVCConfig;
	}


	/**
	 * Leitet den Zugriff auf alle vorhandenen Methoden weiter
	 * Wichtig: nur bei Methoden ohne Parameterweitergabe moeglich
	 * {model()|view()|exchange()}
	 * return Object|NULL
	 * */
	public function __get($objName)
	{
	    if (method_exists($this, $objName)) {
	        return $this->$objName();
	    } else {
	        $this->arrException[] = new Exception('Methode ' . $objName . '() existiert nicht.');
	    }
	}


	/**
	* Gibt das Variable-Objekt zurueck
	* @return Yapary_MVC_Variable
	*/
	protected function variable ()
	{
	    return $this->oView->variable();
	}


	/**
	* Gibt das Exchange-Objekt zurueck
	* @return Yapary_MVC_Exchange
	*/
	protected function exchange ()
	{
		if ($this->oExchange === NULL) {
			$this->arrException[] = new Exception('Exchangeobjekt existiert nicht');
			return NULL;
		}

		return $this->oExchange;
	}


	/**
	 * Gibt das Model-Objekt zurueck
	 * @return Yapary_MVC_Model
	 * */
	protected function model ()
	{
	    return $this->oModel;
	}


	/**
	 * Gibt das View-Objekt zurueck
	 * @return Yapary_MVC_View
	 * */
	protected function view ()
	{
	    return $this->oView;
	}



	/**
	* Laedt Controller und Action und bricht ab diesem Zeitpunkt das alte MVC-Kontrukt ab
	* @param string $_mvcToLoad    : Name/Pfadname des zu ladenden MVC-Models im Format: dir1_dir2_classname.php
	* @param string $_actionname   : Name der vom Controller auszufuehrende Action
	* @param array $_arrActionVars : an die Action uz uebergebende Variablen
	* @return bool
	*
	*/
	public function forwarding ($_controllerName, $_actionName, $_viewName, array $_arrActionVars = array())
	{
	    Yapary_TraceRoute::add();

	    return $this->view()->forwarding($_controllerName, $_actionName, $_viewName, $_arrActionVars);
	}


	/**
	* Liefert alle ausgeloesten Exceptions
	* @return Array[Exception]
	*/
	public function &getExceptionList ()
	{
		return $this->arrException;
	}


	/**
	* Liefert die Anzahl der vorhandenen Exceptions
	* @return int
	*/
	public function getExceptionCount ()
	{
		return count($this->arrException);
	}
}



?>